package main
import (
	"fmt"
)
//模仿走迷宫回溯算法   思考题：找出最短路径
func main(){
	//1、如果元素为1，则是墙
	//2、如果元素为0，则是没有走过的点
	//3、如果元素是2，则是一个通路
	//4、如果元素是3，则说明是走过的一条死路
	var mapp [8][7]int
	//先设置四周的墙
	for i := 0;i < 7;i++{
		mapp[0][i] = 1
		mapp[7][i] = 1
	}
	for i := 0; i < 8;i++{
		mapp[i][0] = 1
		mapp[i][6] = 1
		for j := 0;j < 7;j++{
			fmt.Printf(" %d",mapp[i][j])
		}
		fmt.Println()
	}
	mapp[3][1] = 1
	mapp[3][2] = 1
	fmt.Println()
	fmt.Println()
	//开始找路
	FindWay(&mapp,1,1)
	for i := 0; i < 8;i++{
		for j := 0;j < 7;j++{
			fmt.Printf(" %d",mapp[i][j])
		}
		fmt.Println()
	}
}


//编写一个函数完成老鼠找路
//a代表地图
//i,j是代表在哪个进行测试
func FindWay(a *[8][7]int,i,j int)bool{
	//如果a的a[6][5]=2代表找到了出路了也就是右下角的0
	if a[6][5] == 2{
		return true
	}else{
		//说明要继续找
		if a[i][j] == 0{//说明这个点可以探测
			//假设这个点可以通，就先设为2，然后按照下右上左走  （如果是上下左右他会走满全图）
			a[i][j] = 2
			if FindWay(a,i+1,j){ //下
				return true
			}else if FindWay(a,i,j+1){ //右
				return true
			}else if FindWay(a,i-1,j){ //上
				return true
			}else if FindWay(a,i,j-1){ //左
				return true
			}else{
				a[i][j] = 3
				return false
			}
		}else{ //说明这个点不能探测
			return false
		}
	}
}